import { ElMessage } from 'element-plus/es'
import Clipboard from 'clipboard'
export const message = (message: string, type: any = 'success') =>
  ElMessage({
    message,
    type,
  })

export const handleClipboard = (text: string, event: any) => {
  const clipboard: any = new Clipboard(event.target as Element, {
    text: () => text,
  })
  clipboard.on('success', () => {
    clipboardSuccess()
    clipboard.destroy()
  })
  clipboard.on('error', () => {
    clipboardError()
    clipboard.destroy()
  })
  clipboard.onClick(event)
}

function clipboardSuccess() {
  message('复制成功', 'success')
}

function clipboardError() {
  message('复制识别', 'error')
}

// 禁言input type为number的鼠标滚轮事件
export const stopScroll = (evt: any) => {
  evt = evt || window.event
  if (evt.preventDefault) {
    // Firefox
    evt.preventDefault()
    evt.stopPropagation()
  } else {
    // IE
    evt.cancelBubble = true
    evt.returnValue = false
  }
  return false
}

// 数字转中文大写金额
export const convertCurrency = (money: any) => {
  // 汉字的数字
  const cnNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
  // 基本单位
  const cnIntRadice = ['', '拾', '佰', '仟']
  // 对应整数部分扩展单位
  const cnIntUnits = ['', '万', '亿', '兆']
  // 对应小数部分单位
  const cnDecUnits = ['角', '分', '毫', '厘']
  // 整数金额时后面跟的字符
  const cnInteger = '整'
  // 整型完以后的单位
  const cnIntLast = '元'
  // 最大处理的数字
  const maxNum = 9.9999e14 // 使用科学计数法表示大数
  // 金额整数部分
  let integerNum
  // 金额小数部分
  let decimalNum
  // 输出的中文金额字符串
  let chineseStr = ''
  // 分离金额后用的数组，预定义
  let parts

  if (money === '') {
    return ''
  }

  money = parseFloat(money)
  if (money >= maxNum) {
    // 超出最大处理数字
    return ''
  }

  if (money === 0) {
    chineseStr = cnNums[0] + cnIntLast + cnInteger
    return chineseStr
  }

  // 转换为字符串
  money = money.toString()
  if (money.indexOf('.') === -1) {
    integerNum = money
    decimalNum = ''
  } else {
    parts = money.split('.')
    integerNum = parts[0]
    decimalNum = parts[1].substr(0, 4)
  }

  // 获取整型部分转换
  if (parseInt(integerNum, 10) > 0) {
    let zeroCount = 0
    const IntLen = integerNum.length
    for (let i = 0; i < IntLen; i++) {
      const n = integerNum.substr(i, 1)
      const p = IntLen - i - 1
      const q = p / 4
      const m = p % 4
      if (n === '0') {
        zeroCount++
      } else {
        if (zeroCount > 0) {
          chineseStr += cnNums[0]
        }
        // 归零
        zeroCount = 0
        chineseStr += cnNums[parseInt(n)] + cnIntRadice[m]
      }
      if (m === 0 && zeroCount < 4) {
        chineseStr += cnIntUnits[q]
      }
    }
    chineseStr += cnIntLast
  }

  // 小数部分
  if (decimalNum !== '') {
    const decLen = decimalNum.length
    for (let i = 0; i < decLen; i++) {
      const n = decimalNum.substr(i, 1)
      if (n !== '0') {
        chineseStr += cnNums[Number(n)] + cnDecUnits[i]
      }
    }
  }

  if (chineseStr === '') {
    chineseStr += cnNums[0] + cnIntLast + cnInteger
  } else if (decimalNum === '') {
    chineseStr += cnInteger
  }
  return chineseStr
}

// 获取到物流公司数据列表
export const logisticsCompanies = [
  { label: '顺丰速运', value: 'SF', code: 'SF' },
  { label: '中通快递', value: 'ZTO', code: 'ZTO' },
  { label: '圆通速递', value: 'YTO', code: 'YTO' },
  { label: '韵达快递', value: 'YD', code: 'YUNDA' },
  { label: '申通快递', value: 'STO', code: 'STO' },
  { label: '百世快递', value: 'BEST', code: 'BEST' },
  { label: '邮政快递包裹', value: 'POSTB', code: 'POSTB' },
  { label: 'EMS', value: 'EMS', code: 'EMS' },
  { label: '德邦快递', value: 'DBL', code: 'DEPPON' },
  { label: '京东物流', value: 'JD', code: 'JD' },
  { label: '极兔速递', value: 'JT', code: 'JT' },
  { label: '天天快递', value: 'TTKD', code: 'TTKDEX' },
  { label: '优速快递', value: 'UC', code: 'UC' },
  { label: '安能物流', value: 'ANE', code: 'ANE' },
  { label: '快捷快递', value: 'FAST', code: 'FASTEXPRESS' },
  { label: '龙邦快递', value: 'LB', code: 'LB' },
  { label: '联邦快递', value: 'FEDEX', code: 'FEDEX' },
  { label: 'DHL', value: 'DHL', code: 'DHL' },
  { label: '其他', value: 'OTHER', code: 'OTHER' },
]

export const transformSpecData = (skuData: any[], specData: any[]) => {
  // 1. 处理规格选项
  const spe: any = specData
    .filter((spec) => spec.status === 1) // 只处理状态正常的规格
    .map((spec) => ({
      id: spec.id,
      name: spec.goods_spec_name,
      values: spec.specAttr.map((attr) => ({
        p_id: attr.id,
        name: attr.goods_spec_value_name,
        select: false,
      })),
    }))
  // 2. 处理SKU列表
  const sku: any = skuData.map((sku) => {
    // 分割规格值名称
    let obj = {}
    const goods_spec_name = sku.goods_spec_name.split(',')
    const specValueNames = sku.goods_spec_value_names.split(',')
    specValueNames.forEach((item, index) => {
      obj[goods_spec_name[index]] = item
    })
    return {
      ...obj,
      price: sku.factory_price, // 价格
    }
  })

  return {
    spe,
    sku,
  }
}
